home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / utilstem / dosutil2 / banner2.lbr / BANNER.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-03-03  |  30.1 KB  |  548 lines

  1. 10  ' *Banner*  by Marty Smith
  2. 11  ' 310 Cinnamon Oak Lane, Houston, TX  77079
  3. 12  ' (713) 464-6737
  4. 13  ' At a minimum you need this and the file BANNER3.USR to run this program.
  5. 14  ' The files associated with this program:
  6. 15  '    BANNER.BAS    This file
  7. 16  '    BANKEYS.DAT   A configuration file.
  8. 17  '    BANNER3.USR   Machine module that does the *Banner* tricks.
  9. 18  '    BAN.BAN       Name of the *Banner* file loaded on entry.
  10. 19  '    BANHELP.TXT   An extensive help file.
  11. 20  '    BANDOC.BAS    A BASIC program to print BANHELP neatly on a printer.
  12. 21  '    BANREF.TXT    Prints out as a one page quick reference sheet.
  13. 22  '    ???.BAN       Files with .BAN extension are sample *Banner*s, or yours.
  14. 40  KEY OFF : CLS : LOCATE 12,36 : PRINT "*Banner*"
  15. 50  DEF SEG=0 : X=256*PEEK(&H511) + PEEK(&H510) : Y=256*PEEK(&H414) + PEEK(&H413) : Y=Y*64 : Z=Y-X
  16. 60  Z=Z-186 : Z=Z*16 : IF Z<65536 THEN CLEAR ,Z,2048 ELSE CLEAR ,,2048
  17. 200  DEFINT A-Z:X=0:Y=0:Z=0:I=0:J=0:A=0:B=0:C=0:T=0:TEMP2=0:E$="":CAP$="":OPT$="":OPLEN=0:DOPT=0:DLINE=0:DELTA=0:NK$="":OPTA=0:I$="":C$="":L$="":XCUR=0:YCUR=0:DOT=0:CO$="":DISPLAY=0
  18. 204  BANNER=0:EXITF=0:START=9:DCOLOR=6:CHAR=2:DELAY=1:LNS=1:UL=0:BR=&H184F:ATT=6:UD=-1:NL=0:Y1=0:Y2=0:BDLY=1:LDLY=150:BWDLY=10:DLY!=0:DELAY!=0:PAUSE!=0:FR=6:BACK=0:FG=0:BG=0:SPACES=0:DCHAR=0:T$="":ED1=0:ED=0:I1=0
  19. 208  EXIT=0:WROT=0:MAIN=-1:FOUND=0:M=0:M1=0:M2=0:BANR=-1:MESS$="":ENDIT=0:HELP=0:TC$="":C1$="":DP$="":LS=0:CHANGE=0:INSERT=0:LOADING=0:STORING=0:LOOP=0:FLASH=0:YES=0:HSYNC=90:MESSAGE=0:WINDW=0:F$=""
  20. 210  ADDSPACE=0:RUNNING=0
  21. 215  ENTER$=CHR$(17)+CHR$(196)+CHR$(217):EZ$=CHR$(29)+CHR$(32)+CHR$(29):BLANK$=STRING$(240,32):FS$="ban.ban":A$="banner3.usr":KEY OFF:DEF SEG:WIDTH 80:POKE 106,0:LOCATE 1,1:COLOR 0,0:PRINT CHR$(1):COLOR 7,0
  22. 220  DEF SEG=0 : X!=256*PEEK(&H511)+PEEK(&H510) : Y!=(256*PEEK(&H414)+PEEK(&H413))*64 : Z!=Y!-X!
  23. 225  MARY$="gfe-fggg"
  24. 226  M1$= "mb t100 o3 l8;xmary$;p8 fff4"
  25. 227  M2$= M1$+"gb-b-4; xmary$; gffgfe-"
  26. 230  IF Z! < 4096 THEN DSEG=X!+Z!-185 ELSE DSEG=X!+4097
  27. 232  DEF SEG=&HB800 : X=PEEK(2) : POKE 2,&HB0 : IF PEEK(2)<>&HB0 THEN DISPLAY=1 ELSE DISPLAY=2: POKE 2,X
  28. 234  DEF SEG=&HB000 : X=PEEK(2) : POKE 2,&HB0 : IF PEEK(2)=&HB0 THEN DISPLAY=DISPLAY OR 1 : POKE 2,X
  29. 235  IF DISPLAY=3 THEN IF PEEK(0)=1 THEN BW=-1 ELSE BW=0
  30. 236  DEF SEG:IF BW THEN TOG=1 ELSE TOG=2
  31. 239  MAXLINES=500:DIM A$(MAXLINES),FUNC$(12),DKEY$(10),CNAME$(16),CG$(10),DCOLOR$(16):ON ERROR GOTO 280
  32. 260  DEF SEG=DSEG:BLOAD A$,0
  33. 270  ON ERROR GOTO 0:GOTO 300
  34. 280  IF ERR=53 OR ERR=71 THEN PRINT"I can't find "A$:PRINT"Please put the disk with this file in your default drive and hit <ENTER> . . .":INPUT" or enter a new drivespec";C$
  35. 283  IF LEN(C$)>0 THEN I$=MID$(C$,1,1):IF I$="c" OR I$="C" OR I$="b" OR I$="B" OR I$="a" OR I$="A" THEN A$=I$+":"+A$
  36. 287  IF ERR=53 OR ERR=71 THEN RESUME 260
  37. 288  ON ERROR GOTO 0:GOTO 470
  38. 300  ON ERROR GOTO 350
  39. 310  OPEN"bankeys.dat" FOR INPUT AS#1
  40. 320  INPUT#1,DCHAR:FOR X=1 TO 10:LINE INPUT#1,FUNC$(X):NEXT:INPUT#1,FR:CLOSE:ATT=FR:ON ERROR GOTO 0:GOTO 400
  41. 350  IF ERR=53 THEN CLOSE:OPEN"bankeys.dat" FOR OUTPUT AS#1:RESTORE:READ DCHAR:PRINT#1,DCHAR:FOR X=1 TO 10:READ FUNC$(X):PRINT#1,FUNC$(X):NEXT:READ FR:PRINT#1,FR:CLOSE:RESUME 310
  42. 360  IF ERR=71 THEN PRINT"Please get your disk drive ready to read a file ...":INPUT"Hit <ENTER> to continue . . .";A$:RESUME 310
  43. 370  GOTO 470
  44. 400  ON ERROR GOTO 450
  45. 410  J=1:OPEN"ban.ban" FOR INPUT AS#1:WHILE NOT EOF(1):LINE INPUT#1,A$(J):J=J+1:WEND:CLOSE:J=J-1
  46. 420  ON ERROR GOTO 0:GOTO 550
  47. 450  IF ERR=53 THEN CLOSE:OPEN"ban.ban" FOR OUTPUT AS#1:PRINT#1,"The ^81IBM ^01Personal Computer:   ^04A tool for modern times. . .":CLOSE:RESUME 410
  48. 460  IF ERR=71 THEN PRINT"Please get your disk drive ready. ":INPUT"Press <ENTER> to continue . . .";A$:RESUME 410
  49. 470  PRINT"This program expects to find three files on the default drive. The files are :":PRINT"BANNER.USR , BANKEYS.DAT , and BANMESS.DAT. ":PRINT"If BANNER.USR is not present you are out of luck."
  50. 475  PRINT"If the .DAT files are not present the program tries to create them."
  51. 480  PRINT"This could not happen and I cannot continue.":PRINT"Check your disk and drive, or change the default drive to the one with the ":PRINT"program files and try again. ":ON ERROR GOTO 0
  52. 500  DATA 2,"^01","^02","^03","^04","^17","^47","^14","^57","^84","@END",6
  53. 510  DATA"LIST","RUN","LOAD","SAVE","EDIT","PRINT","CHANGE","TYPE","GOTO","EXIT"
  54. 520  DATA Black,Blue,Green,Cyan,Red,Magenta,Brown,White,Gray,Light Blue,Light Green,Light Cyan,Light Red,Light Magenta,Yellow,Bright White
  55. 530  DATA LETTER,FOREGROUND,KEY,SAVE,HELP,SHORT,RIGHT,LEFT,GOTO,EXIT
  56. 540  DATA BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,WHITE,GRAY,LIGHT BLUE,LIGHT GREEN,LIGHT CYAN,LIGHT RED,LIGHT MAGENTA,YELLOW,BRIGHT WHITE
  57. 550  RESTORE 510:FOR X=1 TO 10:READ DKEY$(X):NEXT:FOR X=0 TO 15:READ CNAME$(X):NEXT:FOR X=1 TO 10:READ CG$(X):NEXT
  58. 580  FOR X=0 TO 15:READ DCOLOR$(X):NEXT:GOTO 10010
  59. 700  SCREEN 0,1,0,0:WIDTH 80:COLOR FR,0,0:CLS:OUT 980,2:OUT 981,HSYNC
  60. 720  BANNER=0:DEF SEG=DSEG
  61. 730  CALL BANNER(EXITF,A$(I),START,DCOLOR,CHAR,DELAY):DEF SEG:RETURN
  62. 810  T=A:TEMP2=B:A=FG:B=BG
  63. 820  IF A>15 THEN B=B OR 8:A=A-16
  64. 830  C$="^"+HEX$(B)+HEX$(A):A=T:B=TEMP2:RETURN
  65. 905  Z=LEN(C$):IF Z=2 THEN C$="^"+C$ELSE IF Z<>3 THEN C$="^0"+HEX$(FR):FG=FR:BG=0:GOTO 990
  66. 910  C1$=MID$(C$,2,1):IF C1$>="a" AND C1$<="z" THEN MID$(C$,2,1)=CHR$(ASC(C1$)-32)
  67. 915  BG=ASC(MID$(C$,2,1))
  68. 920  C1$=MID$(C$,3,1):IF C1$>="a" AND C1$<="z" THEN MID$(C$,3,1)=CHR$(ASC(C1$)-32)
  69. 925  FG=ASC(MID$(C$,3,1))
  70. 930  IF BG>70 OR BG<48 THEN BG=48
  71. 935  IF(BG>57 AND BG<65)THEN BG=48
  72. 940  IF FG>70 OR FG<48 THEN FG=48+FR
  73. 945  IF(FG>57 AND FG<65)THEN FG=48+FR
  74. 950  BG=BG-48:FG=FG-48
  75. 960  IF BG>16 THEN BG=BG-7
  76. 970  IF FG>16 THEN FG=FG-7
  77. 980  IF(BG AND 8)=8 THEN BG=BG AND 7:FG=FG+16
  78. 990  RETURN
  79. 1005  KEY OFF
  80. 1010  LOCATE 25,1:FOR X=1 TO 10:KEY X,FUNC$(X):NEXT:FOR X=1 TO 9:C$=FUNC$(X):GOSUB 905:COLOR FG,BG:PRINT USING"## \  \ ";X,C$;:NEXT:COLOR FR,0:PRINT USING"# \  \";0,FUNC$(10):LOCATE 1,1:COLOR FR,0:RETURN
  81. 1110  FOR X=1 TO 10:KEY X,DKEY$(X)+CHR$(13):NEXT:KEY ON
  82. 1120  RETURN
  83. 1205  KEY OFF
  84. 1210  KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):KEY 3,"LOAD"+CHR$(34):KEY 4,"SAVE"+CHR$(34):KEY 5,"CONT"+CHR$(13):KEY 6,"FILES"+CHR$(13):KEY 7,"GOSUB 65000"+CHR$(13):KEY 8,"GOTO 10010"+CHR$(13):KEY 9,"KEY ":KEY 10,"SCREEN 0,0,0"+CHR$(13):KEY ON:RETURN
  85. 1310  FOR X=1 TO 10:KEY X,CG$(X)+CHR$(13):NEXT:KEY ON
  86. 1320  RETURN
  87. 1410  FOR X=1 TO 7:KEY X,CNAME$(X)+CHR$(13):NEXT
  88. 1420  KEY 8,"Black"+CHR$(13):KEY 9,"Flash"+CHR$(13):KEY 10,"Key"+CHR$(13):KEY ON:RETURN
  89. 1510  DEF SEG=0:POKE 1050,PEEK(1052):DEF SEG:POKE 106,0:RETURN
  90. 1700  BANNER=0:DEF SEG=DSEG:EXITF=0
  91. 1710  CALL BANNER(EXITF,LNS,UL,BR,ATT,UD):DEF SEG:RETURN
  92. 1810  T$=MID$(A$(I),DPOS,4)
  93. 1820  CAP$=T$:GOSUB 6510:T$=CAP$:WINDW=-1:MAIN=0
  94. 1830  IF INSTR(T$,"U")THEN WROT=2:DELAY=LDLY:GOTO 1850ELSE IF INSTR(T$,"D")THEN WROT=3:DELAY=LDLY:GOTO 1850
  95. 1840  IF INSTR(T$,"R")THEN WROT=4:DELAY=BDLY ELSE WROT=1:DELAY=BDLY
  96. 1850  RETURN
  97. 1910  MAIN=-1:SHIFT=-1:WINDW=0:BANR=-1:IF BW THEN DELAY=BWDLY ELSE DELAY=BDLY
  98. 1920  RETURN
  99. 2000  ' .x play command
  100. 2005  MESS$=""
  101. 2010   M1=INSTR(DPOS+2,A$(I),CHR$(34)):IF M1 THEN M2=INSTR(M1+1,A$(I),CHR$(34)):IF M2 THEN DPOS=M2:MESS$=MID$(A$(I),M1+1,M2-M1-1) ELSE MESS$=MID$(A$(I),M1+1,255):DPOS=LEN(A$(I))-1
  102. 2020  IF MESS$="" THEN 2040
  103. 2030  PLAY MESS$
  104. 2040  RETURN
  105. 2110  DOT=-1:PAUSE!=0:MESSAGE=0:NEWCHAR=0:NEWLINE=0:NEWC=0:DPOS=1:SPACES=0:NATT=0:WINDW=0:BANR=0
  106. 2120  WHILE DOT:DP$=MID$(A$(I),DPOS+1,1)
  107. 2125  IF DP$="x" OR DP$="X" THEN GOSUB 2000 'play
  108. 2140  IF DP$="p" OR DP$="P" THEN GOSUB 2400 'pause
  109. 2145  IF DP$="w" OR DP$="W" THEN GOSUB 1810 'window
  110. 2150  IF DP$="m" OR DP$="M" THEN GOSUB 2450 'message
  111. 2155  IF DP$="b" OR DP$="B" THEN GOSUB 1910 'banner
  112. 2160  IF DP$="d" OR DP$="D" THEN GOSUB 2500 'dot char
  113. 2170  IF DP$="l" OR DP$="L" THEN GOSUB 2550 'start line for banner
  114. 2175  IF DP$="n" OR DP$="N" THEN GOSUB 2700 'new attribute
  115. 2180  IF DP$="c" OR DP$="C" THEN GOSUB 2600 'color for message
  116. 2185  IF DP$="s" OR DP$="S" THEN GOSUB 2650 'spaces
  117. 2190  DOT=INSTR(DPOS+1,A$(I),"."):IF DOT THEN DPOS=DOT
  118. 2200  WEND:RETURN
  119. 2305  IF LS THEN 2330
  120. 2310  MPOS=(80-LEN(MESS$))/2:IF MPOS>0 THEN LOCATE MESSAGE,MPOS ELSE LOCATE MESSAGE,1
  121. 2320  PRINT MESS$;
  122. 2330  DPOS=M2
  123. 2340  RETURN
  124. 2350  IF LS THEN 2370
  125. 2360  T=I:I=0:EXITF=-1:IF SHIFT THEN GOSUB 700 :SHIFT=0 :I=T ELSE GOSUB 720:I=T
  126. 2370  RETURN
  127. 2400  PAUSE!=VAL(MID$(A$(I),DPOS+2,6)):IF PAUSE!<0 THEN PAUSE!=0
  128. 2410  RETURN
  129. 2450  MESSAGE=VAL(MID$(A$(I),DPOS+2,4)):IF(MESSAGE<1 OR MESSAGE>25)THEN MESSAGE=0 ELSE M1=INSTR(DPOS+2,A$(I),CHR$(34)):IF M1 THEN M2=INSTR(M1+1,A$(I),CHR$(34)):IF M2 THEN MESS$=MID$(A$(I),M1+1,M2-M1-1):GOSUB 2305
  130. 2460  RETURN
  131. 2500  NEWCHAR=VAL(MID$(A$(I),DPOS+2,4)):IF(NEWCHAR>0 AND NEWCHAR<255)THEN CHAR=NEWCHAR ELSE NEWCHAR=0
  132. 2510  RETURN
  133. 2550  NEWLINE=VAL(MID$(A$(I),DPOS+2,4)):IF(NEWLINE>9 AND NEWLINE<19)THEN START=NEWLINE-1 ELSE NEWLINE=0
  134. 2560  RETURN
  135. 2600  NEWC=INSTR(DPOS,A$(I),"^"):IF(NEWC-DPOS>4 OR NEWC=DPOS)THEN NEWC=0 ELSE C$=MID$(A$(I),NEWC,3):GOSUB 905:COLOR FG,BG
  136. 2610  RETURN
  137. 2650  SPACES=VAL(MID$(A$(I),DPOS+2,4)):IF(SPACES<1 OR SPACES>254)THEN SPACES=0 ELSE A$(0)=SPACE$(SPACES-1)+CHR$(32):GOSUB 2350
  138. 2660  RETURN
  139. 2700  NATT=INSTR(DPOS,A$(I),"^"):IF(NATT-DPOS>4 OR NATT=DPOS)THEN NATT=0 ELSE C$=MID$(A$(I),NATT+1,2):C$="&H"+C$:ATT=VAL(C$):UD=1:GOSUB 2900
  140. 2710  RETURN
  141. 2900  IF ATT=0 THEN ATT=FR
  142. 2903  IF LS THEN 2950
  143. 2905  IF NOT MAIN THEN 2960
  144. 2910  UL=START*256:BR=(START+7)*256+79:UD=1:EXITF=0:GOSUB 1700
  145. 2950  RETURN
  146. 2960  UL=0:BR=&H184F:UD=1:EXITF=0
  147. 2970  GOSUB 1700:RETURN
  148. 3010  IF OPTA=72 THEN DOPT=DOPT-1:IF DOPT=10 THEN 3060ELSE IF DOPT<1 THEN DOPT=1 ELSE DELTA=13-DOPT:LOCATE DLINE-DELTA+1,18,0:PRINT CHR$(32);:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
  149. 3020  IF OPTA=80 THEN DOPT=DOPT+1:IF DOPT>10 THEN DOPT=11:PRINT EZ$;:LOCATE DLINE,DPOS+OPTLEN+1,1:ELSE DELTA=13-DOPT:LOCATE DLINE-DELTA-1,18,0:PRINT CHR$(32);:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
  150. 3030  IF OPTA=71 THEN IF DOPT=11 THEN DOPT=2:OPTA=72:GOTO 3010ELSE LOCATE DLINE-DELTA,18,0:PRINT CHR$(32);:DOPT=1:DELTA=13-DOPT:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
  151. 3040  IF OPTA=79 THEN IF DOPT=11 THEN DOPT=9:OPTA=80:GOTO 3020ELSE LOCATE DLINE-DELTA,18,0:PRINT CHR$(32);:DOPT=10:DELTA=13-DOPT:LOCATE DLINE-DELTA,18:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0
  152. 3050  RETURN
  153. 3060  DELTA=13-DOPT:LOCATE DLINE-DELTA,18,0:COLOR FR+16,0:PRINT CHR$(16);:COLOR 7,0:GOTO 3050
  154. 4040  COLOR 0,FR:PRINT"COLORS in HEX for ^BF (Background|Foreground):":COLOR 10,0
  155. 4050  PRINT"  0 - BLACK - 8  |  4 -  RED   - C  : Background color over 7 creates FLASH.":PRINT"  1 - BLUE  - 9  |  5 -MAGENTA - D  :":PRINT"  2 - GREEN - A  |  6 - BROWN  - E  : FOREGROUND COLOR OVER 7 IS LIGHT VERSION"
  156. 4080  PRINT"  3 - CYAN  - B  |  7 - WHITE  - F  :    of the first 0-7.";:COLOR FR,0:PRINT:RETURN
  157. 4210  COLOR 0,FR:PRINT"DOT command summary. Options during BANNER:";:COLOR 10,0:PRINT
  158. 4220  PRINT"  Dot command MUST be first entry on line. Multiple commands OK on this line.":PRINT"  To start a BANNER line with a period (.), use '^BF.'.":PRINT"  .B     = BANNER mode.   Everything after this printed as a Banner. (default)"
  159. 4250  PRINT"  .W     = WINDOW mode.   Everything after this printed in a Window.":PRINT"  .WU    = WINDOW Scrolls Up.        OPEN .WD   = Window scrolls down.":PRINT STRING$(37,205)+CHR$(206)+STRING$(41,205)
  160. 4270  PRINT"  .P xxx = Pause xxx before next     OPEN .M xx = print stationary Message line xx":PRINT"  .D xxx = xxx is new BANNER dot     OPEN .L xx = BANNER starts on Line xx (10-18)"
  161. 4290  PRINT"  .C^BF = use ^BF Color on still textOPEN .S xx = Print xx Spaces on BANNER";:COLOR FR,0:PRINT:RETURN
  162. 4410  COLOR 0,FR:PRINT"COMMAND summary. To start Edit, <enter>. To get back to COMMAND= <ENTER> or @.";:COLOR 10,0:PRINT
  163. 4420  PRINT"   xx,yy L  = List lines xx to yy.              L = List all.":PRINT"   xx,yy P  = Print lines xx to yy on Printer.  P = Print all.":PRINT"   xx,yy D  = Delete lines xx to yy.            D = Delete all."
  164. 4450  PRINT"   xx    I  = Insert lines at I.                I = Insert at end.":PRINT"   LOAD "+CHR$(34)+"<filename>"+CHR$(34)+" , SAVE "+CHR$(34)+"<filename>"+CHR$(34)+" can be done here."
  165. 4470  PRINT"   ? <func> = Print help screen. <func> is DOT, COLORS, COMMAND, or EDIT":PRINT"   CLS      = Clear screen.";:COLOR FR,0:PRINT:RETURN
  166. 4610  COLOR 0,FR:PRINT"EDITING summary. To get to COMMAND enter '@' or <ENTER> on a blank line.";:COLOR 10,0:PRINT
  167. 4620  PRINT"   Just start typing text. Lines are added. Use full-screen editing keys.":PRINT"   When lines are Listed from COMMAND mode, you can go back to EDIT and change"
  168. 4640  PRINT"    them. The line number form  XX > keeps track of the line you are editing.":PRINT"    You can also change the line numbers or use them to enter lines.":PRINT"'Didn't get that..' while you are editing means you are really in COMMAND? mode"
  169. 4660  PRINT"    Typing 'xx I> <text>'  will Insert a line at line xx.":PRINT"           'xx D>' will Delete line xx.":PRINT"           'xx  > <text> will Enter line xx, replacing current line xx."
  170. 4685  PRINT"           (This will only allow numbers 1+ the current total lines.)":PRINT"           Most anything else is added to the END of the text buffer."
  171. 4690  PRINT"  COMMAND? functions can be used in the form '@<command>' with return to edit.";:COLOR FR,0:PRINT:RETURN
  172. 4810  A=INSTR(CO$,"DOT")OR INSTR(CO$,"dot"):IF A THEN GOSUB 4210:RETURN
  173. 4820  A=INSTR(CO$,"COL")OR INSTR(CO$,"col"):IF A THEN GOSUB 4040:RETURN
  174. 4830  A=INSTR(CO$,"COM")OR INSTR(CO$,"com"):IF A THEN GOSUB 4410:RETURN
  175. 4840  A=INSTR(CO$,"ED")OR INSTR(CO$,"ed"):IF A THEN GOSUB 4610:RETURN
  176. 4850  IF X THEN RETURN
  177. 4860  INPUT"Do you want help with 1) DOTs, 2) COLors, 3) COMmands, or 4) EDiting";CO$
  178. 4870  A=VAL(CO$):IF A>0 AND A<5 THEN ON A GOTO 4210,4040,4410,4610ELSE X=-1:GOTO 4810
  179. 5010  ON ERROR GOTO 5205
  180. 5020  KEY OFF:COLOR 4,0:CLS:LOCATE 10,27,1:PRINT"SAVE BANNER FUNCTION KEYS":COLOR FR:LOCATE 12,1:PRINT"This will save the current state of the function keys during editing, and the":PRINT"Foreground color and default dot character.":PRINT
  181. 5060  PRINT"Press <ENTER> to quit, or get your disk ready and answer yes to the prompt":PRINT:PRINT:GOSUB 1510:COLOR 4:PRINT"Do you want to save the present set of function keys?":I$="":WHILE I$="":I$=INKEY$:WEND
  182. 5090  IF I$="y" OR I$="Y" THEN 5110
  183. 5100  ON ERROR GOTO 0:GOTO 17010
  184. 5110  OPEN"bankeys.dat" FOR OUTPUT AS#1
  185. 5120  PRINT#1,DCHAR:FOR X=1 TO 10:PRINT#1,FUNC$(X):NEXT:PRINT#1,FR:CLOSE:PRINT"Settings SAVED.":FOR X=0 TO 1000:NEXT:GOTO 5100
  186. 5205  COLOR 4
  187. 5210  IF ERR=61 THEN PRINT"The disk is full. Try another.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
  188. 5220  IF ERR=71 THEN PRINT"The disk drive is not ready. Try again.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
  189. 5230  IF ERR=72 THEN PRINT"The disk has gone bad. Try another.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
  190. 5240  IF ERR=70 THEN PRINT"The disk is write protected. Remove the write protect tab or try another.":GOSUB 5500:IF ENDIT THEN RESUME 17010ELSE RESUME 5010
  191. 5250  ON ERROR GOTO 0:END
  192. 5500  PRINT"Hit any key to continue, <Esc> key to quit . . .";
  193. 5510  GOSUB 1510:I$="":WHILE I$="":I$=INKEY$:WEND
  194. 5520  IF ASC(RIGHT$(I$,1))=27 OR I$="e" OR I$="E" THEN ENDIT=-1 ELSE ENDIT=0
  195. 5540  RETURN
  196. 6010  ON ERROR GOTO 6100
  197. 6020  RETURN
  198. 6100  IF ERR=6 THEN PRINT"The number you have input is too large (or small).":PRINT"Try a number between 32767 and -32768.":RESUME
  199. 6110  IF ERR=5 THEN FG=FR:BG=0:BEEP:RESUME NEXT
  200. 6200  ON ERROR GOTO 0
  201. 6210  RETURN
  202. 6510  T=A:FOR A=1 TO LEN(CAP$):TC$=MID$(CAP$,A,1):IF TC$>="a" AND TC$<="z" THEN MID$(CAP$,A,1)=CHR$(ASC(TC$)-32)
  203. 6520  NEXT:A=T:RETURN
  204. 7010  A=INSTR(NK$,"^"):IF A THEN C$=MID$(NK$,A,3):GOSUB 905:GOTO 7200
  205. 7020  A=INSTR(NK$,","):IF A THEN BG=VAL(MID$(NK$,A+1,4)):BG=BG AND 7 ELSE 7050
  206. 7025  IF A=1 THEN 7050
  207. 7030  IF(A>=2 AND A<=4)THEN FG=VAL(NK$)ELSE B=INSTR(A-4,NK$," "):IF B<A THEN FG=VAL(MID$(NK$,B,A-B))
  208. 7035  FG=FG AND 31:GOTO 7200
  209. 7050  CAP$=NK$:GOSUB 6510:NK$=CAP$
  210. 7100  FOR X=0 TO 15
  211. 7110  IF INSTR(NK$,DCOLOR$(X))THEN FOUND=-1:A=X:X=15 ELSE FOUND=0
  212. 7120  NEXT
  213. 7130  IF FOUND THEN IF BACK THEN BG=A ELSE FG=A
  214. 7135  IF FOUND THEN BACK=NOT BACK
  215. 7140  IF INSTR(NK$,"FLASH")THEN FLASH=NOT FLASH:IF FLASH THEN FG=FG+16:BG=BG AND 7 ELSE FG=FG AND 15:BG=BG AND 7
  216. 7150  IF INSTR(NK$,"LIGHT")THEN FG=FG OR 8
  217. 7160  IF INSTR(NK$,"DOT")THEN A=VAL(MID$(NK$,4,4)):IF A>0 AND A<255 THEN DOT=A:GOSUB 8110:DCHAR=DOT:LOCATE 4,27:COLOR FR,0:PRINT DCHAR;" = ";CHR$(DCHAR);"  "
  218. 7200  A=INSTR(NK$,"KEY")OR INSTR(NK$,"key"):IF A THEN IF LEN(NK$)=3 THEN GOSUB 7500ELSE B=VAL(MID$(NK$,A+3,4)):IF(B<10 AND B>0)THEN GOSUB 810:FUNC$(B)=C$:GOSUB 7300
  219. 7290  RETURN
  220. 7300  LOCATE 6+B,1:COLOR FR,0:PRINT USING"Key #, \ \  = ";B,FUNC$(B);
  221. 7310  C$=FUNC$(B):GOSUB 905:COLOR FG,BG:IF FG>15 THEN PRINT"Flashing ";
  222. 7320  PRINT CNAME$(FG AND 15);" on ";CNAME$(BG);SPACE$(47-POS(0)):RETURN
  223. 7500  LOCATE 23,47:INPUT"Which key";B$:B=VAL(B$):IF B<1 OR B>9 THEN GOSUB 7600ELSE GOSUB 810:FUNC$(B)=C$:GOSUB 7300
  224. 7510  GOSUB 1700:RETURN
  225. 7600  CAP$=B$:GOSUB 6510:B$=CAP$:FOR X=1 TO 7
  226. 7610  IF INSTR(B$,DCOLOR$(X))THEN FOUND=-1:B=X:X=7 ELSE FOUND=0
  227. 7620  NEXT:IF FOUND THEN 7650
  228. 7630  IF INSTR(B$,"BLACK")THEN B=8:FOUND=-1 ELSE IF INSTR(B$,"FLASH")THEN B=9:FOUND=-1
  229. 7650  IF FOUND THEN GOSUB 810:FUNC$(B)=C$:GOSUB 7300
  230. 7660  RETURN
  231. 8010  I$="":WHILE I$="":I$=INKEY$:WEND
  232. 8020  IF I$="y" OR I$="Y" OR I$=CHR$(13)THEN YES=-1 ELSE YES=0
  233. 8030  RETURN
  234. 8110  IF DOT=7 THEN 8190
  235. 8120  IF DOT>8 AND DOT<14 THEN 8190
  236. 8130  IF DOT>27 AND DOT<33 THEN 8190
  237. 8150  DCHAR=DOT
  238. 8190  RETURN
  239. 8210  Y1=INSTR(F$,CHR$(34)):Y2=INSTR(Y1+1,F$,CHR$(34)):IF((Y1<>0)AND(Y2<>0))THEN FS$=MID$(F$,Y1+1,Y2-Y1-1):FSQ=-1 ELSE IF(Y1<>0 AND Y1<>LEN(F$))THEN FS$=MID$(F$,Y1+1,12):FSQ=-1 ELSE FSQ=0
  240. 8220  RETURN
  241. 8510  PRINT"A filename can be up to eight letters long, with an optional three letter"
  242. 8520  PRINT"extension that must start with a period, like 'myfile' or 'myfile.ban'.":PRINT"If you don't specify an extension, *BANNER* assumes it is .BAN.":PRINT:PRINT"To list the files on a disk type  a,b,c or ? followed by <ENTER> (";ENTER$;").":RETURN
  243. 9010  IF BW THEN DEF SEG=&HB000 ELSE DEF SEG=&HB800
  244. 9020  X=PEEK(0):POKE 0,1:IF PEEK(0)<>1 THEN GOSUB 65000:BW=NOT BW ELSE POKE 0,X
  245. 9030  DEF SEG:RETURN
  246. 9700  KEY OFF:CLS:COLOR FR:PRINT"   Type on the screen in BIG letters!"
  247. 9710  PRINT:PRINT"Hit the ESC key when finished with this routine.":PRINT:PRINT"Available commands:":PRINT"^BF color commands.         ALT+D <key> = Change dot character.":PRINT"ALT+L <key> locks keyboard until <key> is hit again."
  248. 9730  PRINT:PRINT"Use the cursor arrow keys to move around.":PRINT"Hitting the <End> key allows you to type one letter at the last screen position":PRINT" without scrolling the screen."
  249. 9740  PRINT:GOSUB 5500:IF ENDIT THEN 9790ELSE CLS
  250. 9770  BANNER=0:DEF SEG=DSEG:EXITF=10:CHAR=DCHAR:DCOLOR=FR:CALL BANNER(EXITF,A$(0),START,DCOLOR,CHAR,DELAY)
  251. 9790  DEF SEG:GOTO 13170
  252. 10010  KEY OFF:SCREEN 0,1,0,0:COLOR FR,0,0:CLS:OUT 980,2:OUT 981,HSYNC
  253. 10020  IF INIT THEN LOCATE 4,32,1:PRINT"*BANNER*":LOCATE 6,25,0:GOTO 10030ELSE A$(0)=" *BANNER* ":I=0:EXITF=-1:GOSUB 700:LOCATE 18,25,0
  254. 10030  PRINT"(c) 1983 Martin Smith":PRINT
  255. 10035  COLOR 3,0:PRINT TAB(20)"(1)  LIST   the current Banner.":PRINT TAB(20)"(2)  RUN    the current Banner.":PRINT TAB(20)"(3)  LOAD   a new Banner from a file.":PRINT TAB(20)"(4)  SAVE   the current Banner in a file."
  256. 10080  PRINT TAB(20)"(5)  EDIT   the current Banner, or type a new one.":PRINT TAB(20)"(6)  PRINT  the current Banner on the printer.":PRINT TAB(20)"(7)  CHANGE the default settings or keys.":PRINT TAB(20)"(8)  TYPE   in *BANNER* letters."
  257. 10120  IF DISPLAY=3 THEN PRINT TAB(20)"(9)  GOTO   ";:IF BW THEN PRINT"the Color Display." ELSE PRINT"Black and White Display."
  258. 10125  IF DISPLAY<>3 THEN PRINT TAB(20)"(9)  GOTO   (function for two displays)"
  259. 10130  PRINT TAB(20)"(10) EXIT   the program, reset the Function keys.":PRINT"   Use <F>unction keys, arrow keys or type a command, then press ENTER (";ENTER$;").":GOSUB 1110:PRINT:PRINT
  260. 10165  IF INIT THEN LOCATE 20,12,1 ELSE LOCATE 23,12,1
  261. 10170  COLOR FR+16,0:PRINT"Choice? ";:COLOR 7,0:INIT=-1
  262. 10180  I$="":OPT$="":DLINE=CSRLIN:DOPT=11:OPTLEN=0:DPOS=POS(0):WHILE I$<>CHR$(13)
  263. 10200  I$="":WHILE I$="":I$=INKEY$:WEND:IF I$=CHR$(13)THEN 10240
  264. 10210  IF LEN(I$)=2 THEN OPTA=ASC(MID$(I$,2,1)):IF OPTA=75 THEN I$=CHR$(8)ELSE GOSUB 3010:GOTO 10240
  265. 10220  IF I$=CHR$(8)THEN IF DOPT<>11 THEN PRINT EZ$:LOCATE DLINE,DPOS+OPTLEN+1,1:DOPT=11 ELSE IF OPTLEN<1 THEN OPT$="":OPTLEN=0 ELSE OPT$=LEFT$(OPT$,LEN(OPT$)-1):PRINT EZ$;:OPTLEN=OPTLEN-1
  266. 10225  IF I$=CHR$(8)THEN 10240
  267. 10230  OPT$=OPT$+I$:IF DOPT<>11 THEN PRINT EZ$;
  268. 10235  DOPT=11:OPTLEN=OPTLEN+1:LOCATE DLINE,DPOS+OPTLEN,1:PRINT I$;
  269. 10240  WEND:PRINT
  270. 10250  IF(DOPT>0 AND DOPT<11)THEN 10400
  271. 10260  IF OPT$="" THEN LOCATE DLINE,12:GOTO 10170
  272. 10265  DOPT=VAL(OPT$):IF DOPT>0 AND DOPT<11 THEN 10400
  273. 10270  CAP$=OPT$:GOSUB 6510:OPT$=CAP$
  274. 10285  IF CHANGE THEN 10500
  275. 10290  FOUND=0:FOR X=1 TO 10:IF INSTR(OPT$,DKEY$(X))THEN DOPT=X:FOUND=-1:X=10
  276. 10300  NEXT
  277. 10310  IF NOT FOUND THEN 10010
  278. 10320  IF INSTR(OPT$,"LOAD")THEN F$=OPT$:GOSUB 8210:IF FSQ THEN ON ERROR GOTO 13505:LOADING=-1:GOTO 13015
  279. 10330  IF INSTR(OPT$,"SAVE")THEN F$=OPT$:GOSUB 8210:IF FSQ THEN ON ERROR GOTO 13505:STORING=-1:GOTO 14030
  280. 10400  IF CHANGE THEN 10530
  281. 10410  ON DOPT GOTO 11010,12010,13000,14000,15010,16010,17010,9700,17405,20010:GOTO 10010
  282. 10500  FOUND=0:FOR X=1 TO 10:IF INSTR(OPT$,CG$(X))THEN DOPT=X:FOUND=-1:X=10
  283. 10510  NEXT
  284. 10520  IF NOT FOUND THEN 17010
  285. 10525  COLOR FR,0,0
  286. 10530  ON DOPT GOTO 17210,17310,17610,5010,18010,17510,17490,17460,17405,17960
  287. 10540  GOTO 17010
  288. 11010  COLOR FR,0,0:CLS:LS=-1:KEY OFF
  289. 11020  PRINT TAB(32)"LIST *BANNER* :":PRINT:FOR I=1 TO J:DOT=0:COLOR FR,0
  290. 11040  IF MID$(A$(I),1,1)="." THEN GOSUB 2110:DOT=-1:COLOR 0,FR ELSE GOTO 11080
  291. 11045  IF DOT THEN IF SPACES THEN PRINT"Send";SPACES;"spaces to *Banner*, ";
  292. 11050  IF DOT THEN IF PAUSE!THEN PRINT"Pause =";PAUSE!;", ";
  293. 11052  IF DOT THEN IF NATT THEN PRINT"Change Banner window to &H";HEX$(ATT);", ";
  294. 11055  IF DOT THEN IF NEWCHAR THEN PRINT"New Banner Dot=";CHAR;", ";
  295. 11057  IF DOT THEN IF NEWLINE THEN PRINT"New Banner Line=";START+1;", ";
  296. 11060  IF DOT THEN IF NEWC THEN COLOR FG,BG:PRINT"New message color= ";CNAME$(FG);" on ";CNAME$(BG);:COLOR FR
  297. 11065  IF DOT THEN IF MESSAGE THEN PRINT:PRINT"Message for line";MESSAGE;"is printed on the following line":COLOR FG,BG:PRINT MESS$;:COLOR FR,0
  298. 11070  IF DOT THEN IF WINDW THEN PRINT"Window mode ";:IF WROT=2 THEN PRINT"up, ";ELSE IF WROT=3 THEN PRINT"down, ";ELSE IF WROT=4 THEN PRINT"right, ";
  299. 11072  IF DOT THEN IF BANR THEN PRINT"Banner mode ";
  300. 11075  IF DOT THEN COLOR FR,0:PRINT:GOTO 11120
  301. 11080  FOR X=1 TO LEN(A$(I))
  302. 11090  Y=ASC(MID$(A$(I),X,1)):IF Y=94 THEN C$=MID$(A$(I),X,3):GOSUB 905:COLOR FG,BG:X=X+2 ELSE PRINT CHR$(Y);
  303. 11100  NEXT:PRINT
  304. 11120  IF(CSRLIN>16 AND I MOD 10=0)THEN GOSUB 11500:IF ENDIT THEN I=J
  305. 11125  I$=INKEY$:IF I$<>"" THEN I=J
  306. 11130  NEXT:GOSUB 1110:CHAR=DCHAR:START=9:FG=FR:BG=0:LS=0:COLOR FR+16,0:INPUT"Hit a function key or <ENTER> for menu";OPT$:DOPT=11
  307. 11230  IF OPT$="" THEN 10010
  308. 11240  GOTO 10265
  309. 11500  XCUR=CSRLIN:YCUR=POS(0):LOCATE 25,10:COLOR 0,FR:PRINT"Strike a key to continue, <Esc> key to stop.";:COLOR FR,0:I$="":WHILE I$="":I$=INKEY$:WEND:IF ASC(RIGHT$(I$,1))=27 THEN ENDIT=-1 ELSE ENDIT=0
  310. 11510  LOCATE 25,1:PRINT SPACE$(79);:LOCATE XCUR,YCUR:RETURN
  311. 12010  KEY OFF:CLS:LOCATE 8,36:COLOR FR,0:PRINT"*BANNER*":COLOR 0,7
  312. 12015  LOCATE 10,25:PRINT" Hit <Esc> to stop the banner.";
  313. 12020  LOCATE 12,12:PRINT" Run the banner continuously? ( type <y> to do this ) ";
  314. 12025  I$="":WHILE I$="":I$=INKEY$:WEND:IF I$="y" OR I$="Y" THEN LOOP=-1 ELSE LOOP=0
  315. 12030  EXIT=-1 ' making this 0 will require Ctrl-Break to stop
  316. 12035  LOCATE 15,5:PRINT "Hit <enter> to run the *Banner* in memory, otherwise type in a filename";
  317. 12037  LOCATE 16,5:LINE INPUT "to run. (Won't affect memory *Banner*) Filename==>";FS1$
  318. 12040  KEY OFF:SCREEN 0,1,0,0:WIDTH 80:COLOR FR,0,0:CLS:OUT 980,2:OUT 981,HSYNC:LOCATE,,0:CHAR=DCHAR:START=10:DCOLOR=FR:MAIN=-1
  319. 12045  IF FS1$="" THEN ADDSPACE=0 ELSE ADDSPACE=-1 : GOTO 12600
  320. 12050  FOR I=1 TO J
  321. 12060  IF A$(I)="" THEN 12100
  322. 12065  IF MAIN THEN EXITF=-1 ELSE EXITF=WROT
  323. 12080  IF MID$(A$(I),1,1)="." THEN GOSUB 2110:IF PAUSE!THEN GOSUB 12510:GOTO 12095ELSE GOTO 12100
  324. 12090  IF SHIFT THEN SHIFT=0:GOSUB 700ELSE GOSUB 720
  325. 12095  IF EXITF=-1 THEN IF EXIT THEN I=J:LOOP=0
  326. 12100  NEXT
  327. 12200  IF LOOP THEN 12050ELSE LOCATE 1,1,1:INPUT"Press enter";OPT$:GOTO 10010
  328. 12510  FOR DLY!=0 TO PAUSE!
  329. 12520  NEXT
  330. 12530  I$=INKEY$:IF I$=CHR$(27)THEN EXITF=-1 ELSE EXITF=0
  331. 12540  RETURN
  332. 12600  ' use a file for input
  333. 12605  ON ERROR GOTO 13505
  334. 12610  OPEN FS1$ FOR INPUT AS #1 : I=0
  335. 12615  RUNNING=-1
  336. 12620  WHILE NOT EOF(1)
  337. 12630    LINE INPUT #1,A$(I)
  338. 12660  IF A$(I)="" THEN 12700
  339. 12665  IF MAIN THEN EXITF=-1 ELSE EXITF=WROT
  340. 12680  IF MID$(A$(I),1,1)="." THEN GOSUB 2110:IF PAUSE!THEN GOSUB 12510:GOTO 12695ELSE GOTO 12700
  341. 12685  IF ADDSPACE THEN A$(I)=A$(I)+" "
  342. 12690  IF SHIFT THEN SHIFT=0:GOSUB 700ELSE GOSUB 720
  343. 12695  IF EXITF=-1 THEN IF EXIT THEN LOOP=0:GOTO 12710
  344. 12700  WEND
  345. 12710  CLOSE
  346. 12720  IF LOOP THEN 12610ELSE ON ERROR GOTO 0 :RUNNING=0:LOCATE 1,1,1:INPUT"Press enter";OPT$:GOTO 10010
  347. 13000  ON ERROR GOTO 13505
  348. 13003  IF ED THEN 13015
  349. 13005  KEY OFF:LOADING=-1:CLS:LOCATE 8,29,1:COLOR FR,0:PRINT"LOAD A FILE FROM DISK":GOSUB 8510
  350. 13010  COLOR 2:PRINT:PRINT"Please type in the file name to LOAD, or <ENTER> (";ENTER$;") alone to quit."
  351. 13012  LINE INPUT">";FS$:COLOR FR
  352. 13015  IF FS$="" THEN 10010
  353. 13020  IF FS$="?" THEN FILES:GOTO 13010
  354. 13030  IF FS$="a" OR FS$="A" THEN FILES"a:*.*":GOTO 13010ELSE IF FS$="b" OR FS$="B" THEN FILES"b:*.*":GOTO 13010ELSE IF FS$="c" OR FS$="C" THEN FILES"c:*.*":GOTO 13010
  355. 13035  IF(INSTR(FS$,":")AND LEN(FS$)=2)THEN FS$=FS$+"*.*":FILES FS$:GOTO 13010
  356. 13040  A=INSTR(FS$,"."):IF A=0 THEN FS$=FS$+".ban"
  357. 13120  OPEN FS$FOR INPUT AS#1:J=1:WHILE NOT EOF(1):LINE INPUT#1,A$(J):J=J+1:WEND:CLOSE:J=J-1
  358. 13160  COLOR FR:PRINT FS$;" LOADED.":LOADING=0:IF ED THEN ON ERROR GOTO 0:ED=0:GOTO 15040
  359. 13165  ON ERROR GOTO 0
  360. 13170  GOSUB 1110
  361. 13180  COLOR FR+16,0:PRINT"Hit a function key or <Enter> alone for the Main Menu";:COLOR FR,0:INPUT OPT$
  362. 13190  DOPT=11:IF OPT$="" THEN 10010
  363. 13200  GOTO 10265
  364. 13505  COLOR 12:CLOSE:ED=0
  365. 13510  IF ERR=52 OR ERR=64 THEN PRINT FS$;" has a bad name, try again.":GOTO 13800
  366. 13520  IF ERR=68 THEN PRINT"Drive unavailable. Try another. ":GOTO 13800
  367. 13530  IF ERR=53 THEN PRINT"Can't find ";FS$;". Try another name or check directory.":GOTO 13800
  368. 13540  IF ERR=61 THEN PRINT"Disk is full! Try another.":RESUME 14020
  369. 13550  IF ERR=70 THEN PRINT"Disk write protected.":RESUME 14020
  370. 13560  IF ERR=71 THEN PRINT"Disk drive is not ready.":GOTO 13800
  371. 13570  IF ERR=72 THEN PRINT"The disk is bad. Try another.":GOTO 13800
  372. 13580  IF ERR=24 THEN PRINT"Disk time out. Better check it.":GOTO 13800
  373. 13590  IF ERR=9 THEN PRINT"Lines of file ";FS$;" have been loaded to";MAXLINES;",":PRINT"which BANNER is dimensioned for.":J=J-1:RESUME 13160
  374. 13600  IF ERR=67 THEN PRINT FS$;" either a bad filespec or disk is full.":GOTO 13800
  375. 13610  IF ERR=14 OR ERR=7 THEN PRINT"Lines of file ";FS$;" have been loaded to";J;" and then we ran out of memory. ":A$(J)="":J=J-1:RESUME 13160
  376. 13700  ON ERROR GOTO 0:END
  377. 13800  IF LOADING THEN RESUME 13010ELSE IF STORING THEN RESUME 14020
  378. 13810  GOTO 10010
  379. 14000  ON ERROR GOTO 13505
  380. 14003  IF ED THEN 14030
  381. 14005  KEY OFF:STORING=-1:COLOR FR,0:CLS:LOCATE 8,30,1:PRINT"SAVE A BANNER ON DISK":GOSUB 8510
  382. 14020  COLOR 4:PRINT:PRINT"Please enter a filename to SAVE, or <ENTER> (";ENTER$;") alone to quit."
  383. 14025  LINE INPUT">";FS$:COLOR FR
  384. 14030  IF FS$="" THEN 10010
  385. 14035  IF FS$="?" THEN FILES:GOTO 14020
  386. 14040  IF FS$="a" OR FS$="A" THEN FILES"a:*.*":GOTO 14020ELSE IF FS$="b" OR FS$="B" THEN FILES"b:*.*":GOTO 14020ELSE IF FS$="c" OR FS$="C" THEN FILES"c:*.*":GOTO 14020
  387. 14042  IF(INSTR(FS$,":")AND LEN(FS$)=2)THEN FS$=FS$+"*.*":FILES FS$:GOTO 14020
  388. 14045  A=INSTR(FS$,"."):IF A=0 THEN FS$=FS$+".ban"
  389. 14050  OPEN FS$FOR OUTPUT AS#1:FOR X=1 TO J:PRINT#1,A$(X):NEXT:CLOSE:STORING=0
  390. 14090  COLOR FR:PRINT FS$;" SAVED.":IF ED THEN ON ERROR GOTO 0:ED=0:GOTO 15040
  391. 14100  GOTO 13170
  392. 15010  COLOR FR,0:CLS:KEY OFF:GOSUB 1005
  393. 15020  PRINT"*BANNER* EDIT.  Type ? for command summaries, <ENTER> to edit, END when done.":PRINT"Editing ";:COLOR FR+8:PRINT FS$:COLOR FR:PRINT"Type L to list the current *BANNER*, D to start a new *BANNER*."
  394. 15040  IF ED1 THEN 15400ELSE LINE INPUT"COMMAND? (x to exit, <enter> to edit.)";CO$:ON ERROR GOTO 15610
  395. 15045  IF LEN(CO$)>20 THEN 15040
  396. 15050  IF CO$="" OR CO$="edit" OR CO$="EDIT" THEN 15400ELSE IF CO$="end" OR CO$="END" OR CO$="x" OR CO$="X" OR CO$="@END" THEN ON ERROR GOTO 0:ED=0:ED1=0:GOTO 13170
  397. 15051  IF CO$="i" OR CO$="I" THEN INSERT=-1:E$=CHR$(32):GOTO 15400
  398. 15053  IF MID$(CO$,5,1)=">" THEN COLOR 4,0:PRINT"Can't edit text in COMMAND mode, hit <ENTER> first.":COLOR FR,0:GOTO 15040
  399. 15055  A=INSTR(CO$,"?"):IF A THEN X=0:GOSUB 4810:GOTO 15040
  400. 15057  IF CO$="k" OR CO$="K" THEN GOSUB 1005:GOTO 15040
  401. 15060  A=INSTR(CO$,"LOAD")OR INSTR(CO$,"load")
  402. 15062  IF A THEN F$=CO$:GOSUB 8210:IF FSQ THEN ED=-1:GOTO 13000ELSE ED=0:GOTO 13000
  403. 15065  A=INSTR(CO$,"cls")OR INSTR(CO$,"CLS"):IF A THEN CLS:GOSUB 1005:GOTO 15040
  404. 15070  A=INSTR(CO$,"SAVE")OR INSTR(CO$,"save")
  405. 15072  IF A THEN F$=CO$:GOSUB 8210:IF FSQ THEN ED=-1:GOTO 14000ELSE ED=0:GOTO 14000
  406. 15075  Y1=VAL(CO$):IF Y1 THEN A=INSTR(CO$,","):IF A THEN Y2=VAL(MID$(CO$,A+1,4))ELSE Y2=0
  407. 15076  IF Y2=0 THEN IF A THEN IF INSTR(A,CO$,"#")THEN Y2=J
  408. 15077  IF Y1=0 THEN Y2=0
  409. 15078  IF Y2>J THEN Y2=J
  410. 15079  IF Y1>J THEN Y1=J
  411. 15080  A=INSTR(CO$,"l")OR INSTR(CO$,"L"):IF A THEN IF Y1=0 THEN Y1=1:Y2=J:GOSUB 15305:GOTO 15040
  412. 15085  IF A THEN IF Y2>Y1 THEN GOSUB 15305:GOTO 15040ELSE IF(Y1 AND(Y2=0))THEN Y2=Y1+12:GOSUB 15305:GOTO 15040
  413. 15090  A=INSTR(CO$,"p")OR INSTR(CO$,"P"):IF A THEN IF Y1=0 THEN Y1=1:Y2=J:GOSUB 15355:GOTO 15040
  414. 15095  IF A THEN IF Y2>Y1 THEN GOSUB 15355:GOTO 15040ELSE IF(Y1 AND(Y2=0))THEN Y2=Y1+12:GOSUB 15355:GOTO 15040
  415. 15100  A=INSTR(CO$,"i")OR INSTR(CO$,"I"):IF A THEN I1=Y1-1:INSERT=-1:E$="i":GOTO 15400
  416. 15110  A=INSTR(CO$,"d")OR INSTR(CO$,"D"):IF A THEN IF Y2>Y1 THEN FOR I=Y1 TO J:A$(I)=A$(I+Y2-Y1+1):NEXT:J=J-Y2+Y1-1:GOTO 15040ELSE IF(Y1 AND(Y2=0))THEN FOR I=Y1 TO J:A$(I)=A$(I+1):NEXT:J=J-1:GOTO 15040
  417. 15120  IF A THEN IF(Y1=0 AND Y2=0)THEN COLOR FR+16,0:PRINT"Delete all?":COLOR FR,0:GOSUB 8010:IF YES THEN FOR I=1 TO J:A$(I)="":NEXT:J=0:GOTO 15040ELSE GOTO 15040
  418. 15200  PRINT"Didn't get that. Please try again or type ?":GOTO 15040
  419. 15305  IF Y2>J THEN Y2=J
  420. 15310  FOR I=Y1 TO Y2:PRINT USING" ## >&";I,A$(I)
  421. 15320  I$=INKEY$:IF I$<>"" THEN I=Y2
  422. 15330  NEXT:RETURN
  423. 15355  IF Y2>J THEN Y2=J
  424. 15360  FOR I=Y1 TO Y2:LPRINT USING" ## >&";I,A$(I)
  425. 15370  I$=INKEY$:IF I$<>"" THEN I=Y2
  426. 15380  NEXT:RETURN
  427. 15400  IF E$=CHR$(32)THEN I1=J+1 ELSE I1=I1+1 
  428. 15405  IF INSERT THEN PRINT USING"###!>";I1,E$;
  429. 15410  ED1=-1:LINE INPUT T$:XCUR=CSRLIN:YCUR=POS(0):IF T$="" OR T$="@" THEN ED=0:ED1=0:INSERT=0:GOTO 15040
  430. 15415  IF MID$(T$,1,1)="@" THEN CO$=RIGHT$(T$,LEN(T$)-1):GOTO 15050
  431. 15420  IF MID$(T$,1,8)="COMMAND?" THEN ED1=0:GOTO 15040
  432. 15430  IF LEN(T$)<3 THEN T$=T$+"  "
  433. 15440  Y=VAL(MID$(T$,1,4)):IF(Y=0 AND INSERT)THEN T$=STR$(I1)+" i>"+T$:Y=I1 ELSE IF(Y=0 AND INSERT=0)THEN A$(J+1)=T$:J=J+1:GOTO 15400
  434. 15450  IF Y>J+1 THEN COLOR 4:LOCATE 25,1:PRINT"Invalid line number. Stike a key, <Esc> to exit.";:COLOR FR,0:GOSUB 15900:IF ENDIT THEN ED=0:CO$="end":GOTO 15050ELSE GOTO 15040
  435. 15460  A=INSTR(T$,">"):L$=MID$(T$,1,A):IF(A>6 OR A=0)THEN Y=J+1:GOTO 15500
  436. 15470  T$=RIGHT$(T$,LEN(T$)-A)
  437. 15480  A=INSTR(L$,"d")OR INSTR(L$,"D"):IF A THEN FOR X=Y TO J-1:A$(X)=A$(X+1):NEXT:J=J-1:GOTO 15400
  438. 15490  A=INSTR(L$,"i")OR INSTR(L$,"I"):IF A THEN FOR X=J+1 TO Y+1 STEP-1:A$(X)=A$(X-1):NEXT:A$(Y)=T$:J=J+1:GOTO 15400
  439. 15500  A$(Y)=T$:IF Y=J+1 THEN J=Y
  440. 15590  GOTO 15400
  441. 15610  IF ERR=9 THEN PRINT"The BANNER Edit buffer is full. Try making individual lines longer to add text.":J=J-1:RESUME 15400
  442. 15620  IF ERR=14 THEN PRINT"No more string space is available for text. Try deleting some lines.":RESUME 15040
  443. 15630  IF ERR=27 THEN PRINT"The Printer is out of paper. Reset and try again.":RESUME 15040
  444. 15640  IF ERR=24 THEN PRINT"Device timeout":RESUME 15040
  445. 15650  IF ERR=6 THEN PRINT"Line number is to large. Try another.":RESUME 15400
  446. 15660  IF ERR=68 THEN PRINT"What printer?":RESUME 15040
  447. 15670  IF ERR=25 THEN PRINT"The printer is probably off line.":RESUME 15040
  448. 15690  ON ERROR GOTO 0
  449. 15900  I$="":WHILE I$="":I$=INKEY$:WEND:GOSUB 1510
  450. 15910  IF ASC(RIGHT$(I$,1))=27 THEN ENDIT=-1 ELSE ENDIT=0
  451. 15920  GOSUB 1005:LOCATE XCUR,YCUR:RETURN
  452. 16010  KEY OFF:COLOR FR:CLS
  453. 16020  ON ERROR GOTO 16500:LOCATE 10,19,1:PRINT"PRINT the current BANNER on the printer."
  454. 16040  PRINT:COLOR 2:PRINT"    Get the printer ready and strike any key, or hit the <Esc> key to cancel . . ."
  455. 16050  I$="":WHILE I$="":I$=INKEY$:WEND
  456. 16060  IF ASC(RIGHT$(I$,1))=27 THEN 16100ELSE COLOR 1
  457. 16070  FOR X=1 TO J:PRINT A$(X):LPRINT A$(X)
  458. 16085  I$=INKEY$:IF I$<>"" THEN X=J
  459. 16090  NEXT:ON ERROR GOTO 0
  460. 16100  COLOR FR:GOTO 13165
  461. 16500  COLOR 4 
  462. 16510  IF ERR=24 THEN RESUME NEXT
  463. 16520  IF ERR=27 THEN PRINT"Printer is out of paper.":RESUME 16040
  464. 16530  IF ERR=25 THEN PRINT"Printer is acting up.":RESUME 16040
  465. 16540  ON ERROR GOTO 0:END
  466. 17010  KEY OFF:COLOR FR,0,0:CLS:CHANGE=-1:OUT 980,2:OUT 981,HSYNC
  467. 17020  LOCATE 4,25,0:PRINT"*BANNER* SETTINGS MENU":LOCATE 6,25:PRINT"(c) 1983 Martin Smith":PRINT:COLOR 2:PRINT TAB(20)"(1)  LETTER Character is ";CHR$(DCHAR):PRINT TAB(20)"(2)  FOREGROUND Color is ";:COLOR FR:PRINT CNAME$(FR);:COLOR 2:PRINT
  468. 17060  PRINT TAB(20)"(3)  KEY   Settings for editing":PRINT TAB(20)"(4)  SAVE  Current settings.":PRINT TAB(20)"(5)  HELP  with *BANNER* commands.":PRINT TAB(20)"(6)  SHORT help with commands."
  469. 17070  IF (DISPLAY AND 2) THEN PRINT TAB(20)"(7)  LEFT  Shift Color display 1 character." ELSE PRINT TAB(20)"(7)  (Color display function)"
  470. 17110  IF (DISPLAY AND 2) THEN PRINT TAB(20)"(8)  RIGHT Shift Color Display 1 character." ELSE PRINT TAB(20)"(8)  (Color display function)"
  471. 17120  IF DISPLAY=3 THEN PRINT TAB(20)"(9)  GOTO   ";:IF BW THEN PRINT"the Color Display." ELSE PRINT"Black and White Display."
  472. 17125  IF DISPLAY<>3 THEN PRINT TAB(20)"(9)  GOTO   (function for two displays)"
  473. 17130  PRINT TAB(20)"(10) EXIT  This Function.":PRINT"   Use function keys, arrow keys or type a command, then press ENTER (";ENTER$;").":GOSUB 1310:GOTO 10165
  474. 17210  KEY OFF:COLOR FR:CLS:LOCATE 10,20,1:GOSUB 6010
  475. 17220  PRINT"Letter Character is ";DCHAR;" = "CHR$(DCHAR):LOCATE 12,10:INPUT"New value for LETTER, 1-254 or <ENTER> for no change";X
  476. 17240  IF X=0 THEN GOSUB 6200:GOTO 17010
  477. 17250  IF X<1 OR X>254 THEN PRINT"Valid characters are from 1 to 254, such as 15= ";CHR$(15);" or 219= ";CHR$(219);" or 220= ";CHR$(220);" or 206= ";CHR$(206):INPUT"Press <ENTER>";C$:GOTO 17210
  478. 17260  DOT=X:GOSUB 8110:GOTO 17210
  479. 17310  GOSUB 6010:KEY OFF:GOSUB 1410:COLOR FR,0:CLS:PRINT"This color, ";CNAME$(FR);" is the current FOREGROUND Color for BANNER."
  480. 17320  PRINT:PRINT TAB(20)"Available colors are:":PRINT:FOR X=1 TO 15:COLOR X,0:PRINT TAB(20)X;CNAME$(X):NEXT
  481. 17340  COLOR FR,0:PRINT:PRINT"Foreground can be changed with <F> keys, numbers, or a color names.":INPUT"Please type a new foreground color, <ENTER> for no change";NK$:X=VAL(NK$)
  482. 17350  IF X=0 THEN GOSUB 17385:IF X=0 THEN 17380
  483. 17360  IF X<1 OR X>15 THEN 17310
  484. 17370  FR=X
  485. 17380  GOSUB 6200:GOSUB 1510:GOTO 17010
  486. 17385  CAP$=NK$:GOSUB 6510:NK$=CAP$:FOR A=0 TO 15:IF INSTR(NK$,DCOLOR$(A))THEN X=A:A=15 ELSE X=0
  487. 17390  NEXT:IF INSTR(NK$,"LIGHT")THEN X=X+8
  488. 17395  RETURN
  489. 17405  IF DISPLAY<>3 THEN IF CHANGE THEN 17010 ELSE 10010
  490. 17407  IF BW THEN BW=0 ELSE BW=-1
  491. 17410  KEY OFF:GOSUB 65000:GOSUB 9010:IF CHANGE THEN 17010ELSE 10010
  492. 17460  IF DISPLAY<>3 THEN 17480
  493. 17465  HSYNC=HSYNC-1:IF HSYNC<80 THEN BEEP:HSYNC=86
  494. 17470  OUT 980,2:OUT 981,HSYNC
  495. 17480  COLOR FR,0,FR:GOTO 10165
  496. 17490  IF DISPLAY<>3 THEN 17480
  497. 17495  HSYNC=HSYNC+1:IF HSYNC>99 THEN BEEP:HSYNC=93
  498. 17500  GOTO 17470
  499. 17510  CLS:CO$=OPT$:X=0:GOSUB 4810:PRINT:COLOR FR+16:PRINT"Hit the space bar...":GOSUB 8010
  500. 17520  GOTO 17010:GOSUB 6010:PRINT"Present delay=";DELAY:INPUT"Enter new value (1-255). Delay above 9 loses animation in BANNER";X
  501. 17570  IF X<1 OR X>255 THEN GOTO 17590
  502. 17580  DELAY=X:GOTO 17590
  503. 17590  GOSUB 6200:GOTO 17010
  504. 17610  GOSUB 6010
  505. 17620  KEY OFF:COLOR FR:CLS:COLOR FR,0:PRINT"Change Function Keys and defaults.":PRINT:PRINT TAB(3)"Present foreground color is ";CNAME$(FR):PRINT TAB(3)"Present dot character is ";DCHAR;" = ";CHR$(DCHAR)
  506. 17650  PRINT:PRINT"Function keys during editing are:":LOCATE 7,1:A=FG:B=BG:FOR X=1 TO 10:COLOR FR,0:PRINT USING"Key #, \  \ = ";X,FUNC$(X);
  507. 17680  IF X<10 THEN C$=FUNC$(X):GOSUB 905:COLOR FG,BG:IF FG>15 THEN PRINT"Flashing ";
  508. 17690  IF X<10 THEN PRINT CNAME$(FG AND 15);" on ";CNAME$(BG);SPACE$(47-POS(0))ELSE PRINT"Stop editing key"
  509. 17700  NEXT:FG=A:BG=B:COLOR FR,0:PRINT:IF KEYS THEN 17820
  510. 17710  PRINT TAB(10)"To change these values enter <K>EY, or hit function key <F3>":PRINT TAB(23)"Press <ENTER> (";ENTER$;") alone to exit."
  511. 17730  GOSUB 1510
  512. 17740  I$="":WHILE I$="":I$=INKEY$:WEND
  513. 17750  IF I$="k" OR I$="K" THEN KEYS=-1:GOSUB 1510:GOSUB 1410:GOTO 17805
  514. 17760  IF I$<>CHR$(13)THEN 17730
  515. 17770  KEYS=0:GOSUB 6200:GOTO 17010
  516. 17805  FOR X=0 TO 3:I$=INKEY$:NEXT
  517. 17810  FG=FR:BG=0:BACK=0:FLASH=0:LNS=1:UL=&H12E:BR=&H164F:UD=-1:ATT=FR
  518. 17820  COLOR FR,0:LOCATE 18,1:PRINT BLANK$:LOCATE 18,1:PRINT" Hit <ENTER> type END to quit."
  519. 17830  PRINT"Use  <Fx> keys to make colors,":PRINT" or use ^bf form, or COLOR xx,yy.":PRINT"<F9> switches FLASH, <F10> makes KEY":PRINT"COLOR xx,yy KEY z  will work."
  520. 17850  LOCATE 23,47:COLOR FG,BG:IF(FG AND 16)=16 THEN PRINT"Flashing ";
  521. 17860  PRINT CNAME$(FG AND 15);" on ";CNAME$(BG);:COLOR FR,0:PRINT
  522. 17870  GOSUB 1700:LOCATE 23,47:PRINT"Color for ";:IF BACK THEN COLOR 0,FR:PRINT"BACKGROUND or ?";:COLOR FR,0:PRINT ELSE PRINT"FOREGROUND or ?"
  523. 17880  GOSUB 1700:LOCATE 23,47:LINE INPUT"==>";NK$:IF NK$="" OR NK$="end" OR NK$="END" OR NK$="e" OR NK$="E" THEN 17770
  524. 17890  GOSUB 1700:GOSUB 7010:GOTO 17850
  525. 17960  CHANGE=0:GOTO 10010
  526. 18010  KEY OFF:T$="banhelp.txt":ON ERROR GOTO 18500
  527. 18020  COLOR FR+8,0:CLS:PRINT TAB(23)"*BANNER* Help section.":COLOR FR
  528. 18100  OPEN T$FOR INPUT AS#1:WHILE NOT EOF(1):LINE INPUT#1,A$
  529. 18140  IF A$=CHR$(126)THEN LOCATE 25,1:GOSUB 5500:LOCATE 25,1:PRINT SPACE$(79);:IF ENDIT THEN CLOSE:GOTO 18220ELSE CLS:GOTO 18160
  530. 18150  PRINT A$
  531. 18160  WEND
  532. 18200  CLOSE:PRINT:GOSUB 5500
  533. 18220  ON ERROR GOTO 0:GOTO 17010
  534. 18500  CLOSE 
  535. 18510  IF ERR=53 THEN INPUT"I can't find the help file. Enter a new drive";A$
  536. 18520  IF ERR=53 THEN IF A$="" THEN RESUME 18220ELSE IF MID$(A$,2,1)=":" THEN T$=MID$(A$,1,2)+T$:RESUME 18020
  537. 18530  IF ERR=53 THEN IF A$="a" OR A$="A" THEN T$="a:banhelp.txt":RESUME 18020ELSE IF A$="b" OR A$="B" THEN T$="b:banhelp.txt":RESUME 18020ELSE IF A$="c" OR A$="C" THEN T$="c:banhelp.txt":RESUME 18020
  538. 18540  IF ERR=71 THEN INPUT"Disk is not ready. Press <ENTER> and we will try again.":RESUME 18020
  539. 18600  ON ERROR GOTO 0:PRINT"function":RETURN
  540. 20010  GOSUB 1205
  541. 20020  CLOSE:DEF SEG:POKE 106,0:PRINT"(C) 1983 Martin Smith.":PRINT"Hit Function Key <F8> to continue. . .":END:END
  542. 65000  IF TOG=1 THEN TOG=2 ELSE TOG=1
  543. 65010  ON TOG GOSUB 65090,65040:RETURN
  544. 65040  DEF SEG=0
  545. 65050  POKE &H410,(PEEK(&H410)AND &HCF)OR &H10:SCREEN 1,0,0,0:SCREEN 0:WIDTH 40:WIDTH 80:LOCATE,,1,6,7:DEF SEG:RETURN
  546. 65090  DEF SEG=0
  547. 65100  POKE &H410,(PEEK(&H410)OR &H30):SCREEN 0:WIDTH 40:WIDTH 80:LOCATE,,1,12,13:DEF SEG:RETURN
  548.